package ontology_tools;

/**
 * Clase que contiene los Prefixes, el Body y el End de una consulta SPARQL;
 * Para construirla y devolver la consulta a ejecutar.
 *
 * @author felipe & javi
 */
public class QueryBuilder {

    private final static String PREFIXES =
            "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n"
            + "PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>\n"
            + "PREFIX owl:<http://www.w3.org/2002/07/owl#>\n"
            + "PREFIX ont:<http://www.semanticweb.org/javi/ontologies/2013/2/untitled-ontology-9#>\n";
    private final static String BODY =
            "SELECT ?procesador ?placaBase ?memoria ?discoDuro ?tarjetaGrafica\n"
            + "WHERE {\n"
            + "?procesador rdfs:subClassOf ?r1 .\n"
            + "?procesador rdfs:subClassOf ?r2 .\n"
            + "?placaBase rdfs:subClassOf ?r1 .\n"
            + "?placaBase rdfs:subClassOf ?r2 .\n"
            + "?tarjetaGrafica rdfs:subClassOf ?r1 .\n"
            + "?tarjetaGrafica rdfs:subClassOf ?r2 .\n"
            + "?tarjetaGrafica rdfs:subClassOf ont:TarjetaGrafica .\n"
            + "?memoria rdfs:subClassOf ?r1 .\n"
            + "?memoria rdfs:subClassOf ont:Memoria .\n"
            + "?discoDuro rdfs:subClassOf ?r1 .\n"
            + "?r1 rdf:type owl:Restriction .\n"
            + "?r1 owl:onProperty ont:esGasto .\n"
            + "?r2 rdf:type owl:Restriction .\n"
            + "?r2 owl:onProperty ont:esAptoPara .\n";
    private final static String END = "}";
    private StringBuilder query;

    public QueryBuilder() {
        query = new StringBuilder(PREFIXES).append(BODY);
    }

    /**
     * Concatena un trozo de consulta al cuerpo de la original.
     *
     * @param traduction Trozo de consulta
     */
    public void addToQuery(String traduction) {
        query.append(traduction);
    }

    /**
     * Finaliza la consulta y la devuelve entera como un String.
     *
     * @return La consulta final.
     */
    public String buildQuery() {
        query.append(END);
        return query.toString();
    }
}